"""
https://leetcode.cn/problems/group-anagrams/description/
49. 字母异位词分组
已解答
中等
相关标签
相关企业
给你一个字符串数组，请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。



示例 1:

输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
示例 2:

输入: strs = [""]
输出: [[""]]
示例 3:

输入: strs = ["a"]
输出: [["a"]]


提示：

1 <= strs.length <= 104
0 <= strs[i].length <= 100
strs[i] 仅包含小写字母
"""
from typing import List
import secrets


class Solution:


    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        """
        此题实际是个分组题，分组的规则是，如果两个单词的每个字符的数量均一致，则分到一个组中
        一种方式是，给每个字母一个hash值（可以理解为一个较大的随机值）。
        之后再获取每个字符串对应的hash值之和（允许数字超出为负数）
        也可以使用其他获取独一无二值的方式
        :param strs:
        :return:
        """

        char_dict=[]
        for i in range(26):
            char_dict.append(hash(secrets.randbits(32)))


        mark_to_list={}
        for str in strs:
            mark=0
            for c in str:
                mark+=char_dict[ord(c)-ord('a')]
            if mark not in mark_to_list:
                mark_to_list[mark]=list()
            mark_to_list[mark].append(str)

        res=[]
        for k,v in mark_to_list.items():
            res.append(v)


        return res

if __name__ == '__main__':
    sol=Solution()

    strs=["a"]
    res=sol.groupAnagrams(strs)
    print(res)

    pass